package com.hzlj.position.locate.common.dto.position;

import cn.hutool.core.date.DateUtil;
import com.fz.common.base.enums.db.*;
import com.hzlj.sqjz.jz.common.model.JzJbxx;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.List;

/**
 * 定位记录-分表(Position)查询参数DTO
 *
 * @author lifh
 * @date 2023-03-16 12:54:48
 */
@Data
@ToString
@Accessors(chain = true)
public class PositionQueryParamDTO {
    /**
     * 机构ID全路径
     */
    @QueryField(like = LikeType.RIGHT)
    private String jgCode;
    /**
     * 矫正ID(jz_jbxx)
     */
    private String jzId;
    /**
     * 矫正ID(jz_jbxx)
     */
    @QueryField(in = InType.COMMA_ARRAY, value = "jzId")
    private List<String> jzIds;
    /**
     * 矫正人员名称
     */
    private String xm;
    /**
     * 设备编号
     */
    private String deviceCode;
    /**
     * 定位渠道类型,dict-LOCATE_CHANNEL_TYPE
     */
    private String channelType;
    /**
     * 定位渠道,dict-LOCATE_CHANNEL
     */
    private String channel;
    /**
     * 定位时间-由设备产生(开始)
     */
    @QueryField(range = RangeType.GTE, value = "positionTime")
    private Date startPositionTime = DateUtil.beginOfDay(new Date());
    /**
     * 定位时间-由设备产生(结束)
     */
    @QueryField(range = RangeType.LTE, value = "positionTime")
    private Date endPositionTime = DateUtil.endOfDay(new Date());
    /**
     * 告警类型,dict-LOCATE_WARNING_TYPE
     */
    private String warningType;
    /**
     * 告警类型,dict-LOCATE_WARNING_TYPE
     */
    @QueryField(in = InType.COMMA_ARRAY, value = "warningType")
    private List<String> warningTypes;
    /**
     * 处理状态,dict-HANDLE_STATUS
     */
    private String handleStatus;
    /**
     * 是否是重点人员
     * 只能使用于获取最新定位记录
     */
    @QueryField(model = JzJbxx.class)
    private Boolean zdry;
    /**
     * 犯罪类型
     * 只能使用于获取最新定位记录
     */
    @QueryField(model = JzJbxx.class, findInSet = FindInSet.AND)
    private String fzlx;
    /**
     * 是否只筛选异常数据
     */
    private Boolean warning;
    /**
     * 不需要传入
     * 有经纬度
     */
    @QueryField(enable = EnableType.FALSE)
    private Boolean hasPosition;
    /**
     * 不需要传入
     * 按照时间顺序
     */
    @QueryField(enable = EnableType.FALSE)
    private Boolean positionTimeAsc;

    /**
     * 是否需要矫正信息数据
     */
    private Boolean withJzJbxx;

    /**
     * 系统核查标记,0核查中 1核查正常 2核查异常,dict-POSITION_SYS_CHECK
     */
    private String sysCheck;
    /**
     * 系统核查标记：原始记录+核查记录
     */
    @QueryField(enable = EnableType.FALSE)
    private Boolean sysCheckFlag;
    /**
     * 数据类型标记：是否是核查记录
     */
    @QueryField(enable = EnableType.FALSE)
    private Boolean dataTypeFlag;

    /**
     * 是否是纠偏上报记录
     * true:纠偏上报记录
     * false：原纪录
     */
    private Boolean correctFlag;
    /**
     * 同步状态,dict-TBZT
     */
    private String syncStatus;
    /**
     * 同步状态,dict-TBZT
     */
    @QueryField(in = InType.COMMA_ARRAY, value = "syncStatus")
    private List<String> syncStatuses;
}
